/**
 * 
 */
package criteres;


import io.ChargerListeTagCritereTagP;
import io.ImporterFichierHTML;
import io.OutilsParsingHTML;

import java.io.File;
import java.util.Vector;
import general.*;
import gui.TextArea;


import javax.swing.text.html.HTML;


import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * Classe permettant de calculer le critère de TagP, c'est à dire la probabilite des tags html dans une page
 * @author remi
 *@version 1.0
 */

public class CritereTagP {

	// TODO CritereTagP getters, private , etc




	/**
	 * contient la liste des balise html du fichier de conf
	 */
	public static String stringlisteBaliseNumero = "";
	public static Vector<Element> elements = new Vector<Element>();
	public static String nomFichierConf = "config/configTagP.html";
	public static int kCoefAGarder=10;
	

	/**
	 * constructeur de critereTagP
	 */
	public CritereTagP() {
		// TODO CritereTagP Auto-generated constructor stub
		super();	
	}



	/**
	 * fonction permettant de lancer le calcul de critere TagP sur un ensemble de page
	 * @param pages pages dont on va extraire le critere TagP
	 * @return vrai ou faux si erreur
	 */
	public static boolean calculCritereTagP(Vector<Page> pages){
		// TODO calculCritereTagP : ...
		
		//charger le fichier de conf
		ChargerListeTagCritereTagP.chargerListeTagCritereTagP(nomFichierConf);
		
//		System.out.println("voici la liste des tags chargé");
//		for(Element element : elements){
//			System.out.println(element.tagName());
//		}
		
		//boucle sur les pages
		int i =1;
		for(Page page : pages){
			TextArea.effacerPuisEcrireMsg("calcul du critere TagP de la page :"+i+" sur "+pages.size());

			calculCritereTagP(page);
		i++;
		}
		
		return false;
	}
	public static boolean calculCritereTagP(Vector<Page> pages,Document document){
		// TODO calculCritereTagP : ...
		
		//charger le fichier de conf
		ChargerListeTagCritereTagP.chargerListeTagCritereTagP(nomFichierConf);
		
//		System.out.println("voici la liste des tags chargé");
//		for(Element element : elements){
//			System.out.println(element.tagName());
//		}
		
		//boucle sur les pages
		int i =1;
		for(Page page : pages){
			TextArea.effacerPuisEcrireMsg("calcul du critere TagP de la page :"+i+" sur "+pages.size());

			calculCritereTagP(page,document);
		i++;
		}
		
		return false;
	}



	/**
	 * fonction permettant de lancer le calcul de critere TagP sur une seule page
	 * @param page page dont on va extraire le critere TagP
	 * @return vrai ou faux si erreur
	 */
	public static boolean calculCritereTagP(Page page){
		// TODO calculCritereTagP : ...

		//parser le fichier

		Document document  = OutilsParsingHTML.fileToDocument(page.getFichier());
		
		calculCritereTagP(page, document);
		return false;
	}
	
	/**
	 * fonction permettant de lancer le calcul de critere TagP sur une seule page SANS PARSER
	 * @param page page dont on va extraire le critere TagP
	 * @return vrai ou faux si erreur
	 */
	public static boolean calculCritereTagP(Page page,Document document){
		// TODO calculCritereTagP : ...

		//parser le fichier
		
		
		Vector<Float> criteresTagP = new Vector<Float>();
		for(Element element  : elements){
			criteresTagP.add((float) chercherNbOccurence(element, document)); 
		}
		
		//mettre a jour la page
		page.getPointBrut().setCriteresTagP(criteresTagP);
		page.getPoint().setCriteresTagP(criteresTagP);
		
		return false;
	}
	
	
	/**
	 * fonction permettant de trouver le nombre d'occurence d'un tga html dans un fichier html
	 * @param element l'element qu'on a chercher dans la page
	 * @param document le document html qui serra analysé
	 * @return le nombre d'occurence
	 */
	public static int chercherNbOccurence(Element element, Document document ){
		// TODO chercherNbOccurence : ... note :cette fonction devrait etre statique
		int retour=0;
		
		Elements elements = document.getElementsByTag(element.tagName());
		
		retour = elements.size();

		return retour;
	}
	
	// TODO CritereTagP : eventuellement une fonction pageToString qui irait lire le texte d'une page a partir de son URL

	/**
	 * @return the elements
	 */
	public static Vector<Element> getElements() {
		return elements;
	}

	/**
	 * @param elements the elements to set
	 */
	public static void setElements(Vector<Element> elements) {
		CritereTagP.elements = elements;
	}

	/**
	 * @return the kCoefAGarder
	 */
	public int getkCoefAGarder() {
		return kCoefAGarder;
	}

	/**
	 * @param kCoefAGarder the kCoefAGarder to set
	 */
	public void setkCoefAGarder(int kCoefAGarder) {
		CritereDCT.kCoefAGarder = kCoefAGarder;
	}

	public static void main(String[] args) {

		File repertoire = new File("inputHTML/test_tag"); 
		Vector<Page> pages = new Vector<Page>();
		ImporterFichierHTML.creerPagesAPartirDunRepertoire(repertoire, pages);
		System.out.println("contenu du vecteur page de taille : "+pages.size());
		CritereTagP.calculCritereTagP(pages);

		//afficher le resultat du calcul
		for(Page page : pages ){
			System.out.println("contenu de la page (criteree TagP) "+ page.getPoint().getCriteresTagP());
		}
	}
}
